/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.data.crud;

import br.data.model.Cidades;
import br.data.model.Estados;
import br.data.model.Fornecedores;
import java.sql.Date;
import java.util.Collection;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

/**
 *
 * @author thiago
 */
public class CrudFornecedores {

    EntityManagerFactory emf = Persistence.createEntityManagerFactory("wabtPU");

    public void persist(Object object) {
        EntityManager em = emf.createEntityManager();
        try {
            em.getTransaction().begin();
            em.persist(object);
            em.getTransaction().commit();
        } catch (Exception e) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e);
            em.getTransaction().rollback();
        } finally {
            em.close();
        }

    }

    public Collection<Fornecedores> getAll() {
        EntityManager em = emf.createEntityManager();
        try {
            return em.createNamedQuery("Fornecedores.findAll").getResultList();
        } catch (Exception e) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e);
            em.getTransaction().rollback();
            return null;
        } finally {
            em.close();
        }

    }

    public br.data.model.Fornecedores getFornecedor(String login) {

        EntityManager em = emf.createEntityManager();
        try {
            return (br.data.model.Fornecedores) em.createNamedQuery("Fornecedores.findByLogin").setParameter("login", login).getSingleResult();
        } catch (Exception e) {
            return null;
        } finally {
            em.close();
        }
    }

    public int getNovoCodigo() {
        EntityManager em = emf.createEntityManager();
        try {
            int max = Integer.parseInt(em.createQuery("SELECT MAX(f.codigoforn) FROM Fornecedores f").getResultList().get(0).toString());
            return (max + 1);
        } catch (Exception e) {
            return 0;
        } finally {
            em.close();
        }
    }

    public br.data.model.Fornecedores getFornecedor(int codigo) {

        EntityManager em = emf.createEntityManager();
        try {
            return em.find(br.data.model.Fornecedores.class, codigo);
        } catch (Exception e) {
            return null;
        } finally {
            em.close();
        }
    }

    public br.data.model.Fornecedores getFornecedor(String login, String senha) {

        EntityManager em = emf.createEntityManager();
        try {
            return (br.data.model.Fornecedores) em.createQuery("SELECT f FROM Fornecedores f WHERE f.login = :login AND f.senha = :senha").setParameter("login", login).setParameter("senha", senha).getSingleResult();
        } catch (Exception e) {
            return null;
        } finally {
            em.close();
        }
    }

    public void remove(int codigo) {
        EntityManager em = emf.createEntityManager();
        try {
            em.getTransaction().begin();

            br.data.model.Fornecedores forn;
            forn = em.find(br.data.model.Fornecedores.class, codigo);
            em.remove(forn);

            em.getTransaction().commit();
        } catch (Exception e) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e);
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }

    public void update(Fornecedores object) {
        EntityManager em = emf.createEntityManager();
        try {
            em.getTransaction().begin();

            em.merge(object);

            em.getTransaction().commit();
        } catch (Exception e) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e);
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }

    public void update(Integer codigoforn, Date datacadastro, String razaosocial, String fantasia, String cnpj, String inscestadual, String telefone, String rua, String complemento, String bairro, String logradouro, String cep, Integer numero, String login, String senha, Estados est, Cidades cid) {

        EntityManager em = emf.createEntityManager();
        try {
            em.getTransaction().begin();

            br.data.model.Fornecedores forn;
            forn = em.find(br.data.model.Fornecedores.class, codigoforn);

            forn.setCodigoforn(codigoforn);
            forn.setBairro(bairro);
            forn.setCep(cep);
            forn.setCnpj(cnpj);
            forn.setCodigocid(cid);
            forn.setCodigoest(est);
            forn.setComplemento(complemento);
            forn.setDatacadastro(datacadastro);
            forn.setFantasia(fantasia);
            forn.setInscestadual(inscestadual);
            forn.setLogin(login);
            forn.setSenha(senha);
            forn.setLogradouro(logradouro);
            forn.setNumero(numero);
            forn.setRazaosocial(razaosocial);
            forn.setRua(rua);
            forn.setTelefone(telefone);

            em.merge(forn);

            em.getTransaction().commit();
        } catch (Exception e) {
            Logger.getLogger(getClass().getName()).log(Level.SEVERE, "exception caught", e);
            em.getTransaction().rollback();
        } finally {
            em.close();
        }
    }
}
